package org.algorithm.二师兄.链表;

import org.algorithm.common.ListNode;

/***
 *
 *  和为0 包括但不限定：    正整数之间想减和为0， 正负相加和为0
 *
 * 参考地址： https://leetcode-cn.com/problems/remove-zero-sum-consecutive-nodes-from-linked-list/
 */
public class 删除和为0的连续节点 {

    public static void main(String[] args) {

        ListNode listNode = ListNode.build(1,2,3,-3,4);
        ListNode.print(removeSumZeroListNode(listNode));
    }

    private static ListNode removeSumZeroListNode(ListNode listNode) {
        if (listNode == null || listNode.next == null) return listNode;
        // 定义一个操作链表和一个返回链表
        // 改造成双层for循环， 冒泡排序处理
        ListNode dummy = new ListNode(0);
        ListNode start = dummy;
        dummy.next = listNode;
        int sum = 0;
        while (dummy != null) {
            sum = 0;
            listNode = dummy.next;
            while (listNode != null) {
                sum+=listNode.val;
                if (sum == 0) {
                    dummy.next = listNode.next;
                }
                listNode = listNode.next;
            }
            dummy = dummy.next;
        }
        return start.next;
    }
}
